-
Notifications
You must be signed in to change notification settings - Fork 615
Fix and Enhance Detect and Launch Component #1688
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
AndyHaas
wants to merge
15
commits into
master
Choose a base branch
from
detectAndLaunch-fixes
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Priority 1 Fixes: - Fix null value error in field comparison (1.3) - Added null check before calling toString() on field values - Prevents 'Cannot read property toString of null' runtime errors - Extracts fieldKey and fieldData into variables for better readability - Only calls toString() when fieldData exists and value is not null - Add debug mode attribute (1.1 - partial) - Added 'debugMode' Boolean attribute (default: false) - Allows users to opt-in to console logging for debugging - Disabled by default for performance and security Documentation: - Added ANALYSIS.md with comprehensive component analysis - Added FIX_PLAN.md with prioritized fix plan and implementation roadmap Files changed: - detectAndLaunchController.js: Fixed null handling in field value comparison - detectAndLaunch.cmp: Added debugMode attribute - ANALYSIS.md: New file with technical analysis - FIX_PLAN.md: New file with fix plan and priorities
Priority 1 Fix (1.1): Remove/Reduce Console Logging Changes: - Created debugLog() helper function in detectAndLaunchHelper.js - Checks debugMode attribute before logging - Supports optional data parameter for structured logging - Only logs when debugMode is explicitly enabled (default: false) - Replaced all console.log statements with conditional debug logging - Controller: 8 console.log statements → helper.debugLog() calls - Helper: 12 console.log statements → this.debugLog() calls - Total: 20 debug statements now conditional on debugMode - Critical error logging preserved - Changed error logging to console.error() (always logs) - Catch block errors in workspace API calls - ERROR changeType events in recordUpdated handler - Ensures critical issues are always logged for troubleshooting Benefits: - Performance: No console logging overhead when debugMode=false (default) - Security: Internal component logic not exposed unless explicitly enabled - Maintainability: Centralized logging logic in debugLog() helper - User Experience: Users can enable debug mode when troubleshooting Files changed: - detectAndLaunchController.js: Replaced 8 console.log with debugLog calls - detectAndLaunchHelper.js: Added debugLog helper, replaced 12 console.log calls
Priority 1 Fix (1.2): Fix Loose Equality Checks
Changes:
- detectAndLaunchHelper.js:
- Line 48: Changed 'flowApiName == null || flowApiName == undefined' to '!flowApiName'
- Uses truthiness check which is cleaner and more idiomatic
- Handles null, undefined, empty string, 0, false consistently
- Line 51: Changed 'launchMode == "Modal"' to 'launchMode === "Modal"'
- Prevents unexpected type coercion
- Ensures exact string match
- Line 65: Changed 'flowApiName != null && flowApiName != undefined' to 'flowApiName'
- Simplified redundant check (already verified flowApiName is truthy above)
- More readable and maintainable
- detectAndLaunchController.js:
- Line 39: Changed 'fieldChange != null && fieldValue != null' to strict checks
- Now uses '!== null && !== undefined' for both fieldChange and fieldValue
- Explicitly checks for both null and undefined (common in Lightning attributes)
- Prevents type coercion issues
- Line 51: Changed 'fieldData.value != null' to 'fieldData.value !== null'
- Uses strict equality for null check
- More explicit about checking for null specifically
Benefits:
- Prevents unexpected type coercion bugs
- More explicit and readable code
- Follows JavaScript best practices
- Reduces potential for subtle bugs from loose equality
Files changed:
- detectAndLaunchHelper.js: 3 loose equality checks fixed
- detectAndLaunchController.js: 2 loose equality checks fixed
Priority 1 Fix (1.4): Add Error Handling for Flow Launch
Changes:
- Added comprehensive error handling around flow.startFlow() call
- Wrapped flow.startFlow() in try-catch block to handle runtime errors
- Added validation to check if flow component exists before calling startFlow
- Added validation to ensure flowApiName is valid before attempting to start flow
- Error handling improvements:
- Try-catch block catches any errors during flow.startFlow() execution
- Logs detailed error information using console.error (always logs)
- Error object
- Flow API name for context
- Error message/details
- Automatically closes modal if flow fails to start (prevents stuck modal)
- Provides clear error messages for missing flow component or invalid flow name
- Validation checks:
- Checks if flow component exists (component.find('flow') returns valid component)
- Checks if flowApiName is truthy before attempting to start
- Separate error messages for each validation failure
Benefits:
- Prevents unhandled exceptions from crashing component
- Provides clear error messages for troubleshooting
- Gracefully handles errors by closing modal
- Better user experience when flows fail to start
- Helps developers identify configuration issues
Files changed:
- detectAndLaunchHelper.js: Added try-catch and validation around flow.startFlow()
… literals
Priority 2 Fix (2.2): Improve Code Readability with Template Literals
Changes:
- Replaced all string concatenation with ES6 template literals for better readability
- All targetUrl constructions now use template literals
- All debug log string concatenations converted to template literals
- Specific changes:
- Line 34: targetUrl in REMOVED event handler
- Before: '/flow/' + component.get("v.targetFlowName") + '?recordId=' + component.get("v.recordId")
- After: `/flow/${component.get("v.targetFlowName")}?recordId=${component.get("v.recordId")}`
- Line 99: targetUrl in console subtab navigation
- Same pattern updated
- Line 113: targetUrl in standard window.open
- Same pattern updated
- Debug log improvements:
- Line 23: currentUrl debug log
- Line 29: changeType debug log (CHANGED event)
- Line 35: targetURL debug log (REMOVED event)
- Line 38: changeType debug log (LOADED event)
- Line 46: changeType debug log (callFlow)
- Line 94: console navigation debug log
- Line 114: targetURL debug log (standard window.open)
Benefits:
- More readable and maintainable code
- Modern JavaScript best practices (ES6 template literals)
- Easier to modify URL patterns
- Consistent code style throughout helper file
- Reduced chance of syntax errors from missing + operators
Files changed:
- detectAndLaunchHelper.js: 10 string concatenations replaced with template literals
…er method Priority 2 Fix (2.3): Refactor Field Watching Logic Changes: - Created checkFieldValueMatch() helper method in detectAndLaunchHelper.js - Extracts complex nested conditional logic from recordUpdated controller method - Encapsulates all field value matching logic in a single, testable method - Returns boolean indicating if field value matches configured criteria - Includes comprehensive JSDoc documentation - Simplified recordUpdated() method in detectAndLaunchController.js - Reduced from 30+ lines of nested conditionals to simple helper call - Much more readable and maintainable - Clear separation of concerns - Helper method logic: - Validates fieldChange and fieldValue are configured - Only processes CHANGED events (conditional launch only works on edits) - Validates changedFields exists - Safely extracts and compares field values - Handles null/undefined values gracefully - Returns true only when field value matches expected value - Additional improvements: - Fixed remaining string concatenation in debug log (template literal) - Improved code organization and maintainability Benefits: - Improved code readability and maintainability - Easier to test field matching logic in isolation - Reduced complexity in controller method - Better separation of concerns - Reusable helper method for future enhancements Files changed: - detectAndLaunchController.js: Simplified recordUpdated method (30 lines reduced) - detectAndLaunchHelper.js: Added checkFieldValueMatch helper method (43 lines added)
Priority 2 Fix (2.5): Fix Modal Height Issue Changes: - Removed hardcoded 600px height from modal container - Removed inline style="height: 600px;" from div wrapper - Changed class from "demo-only" to "slds-modal-container" for better semantics - Added responsive CSS classes and styles - Added slds-modal__container--responsive class to modal container - Implemented responsive sizing with max-width and max-height - Modal now adapts to viewport size (90vw x 90vh on desktop, 95vw x 95vh on mobile) - Added responsive CSS rules in detectAndLaunch.css - Base responsive sizing: max-width 90vw, max-height 90vh - Content area is scrollable if needed (max-height calc(90vh - 8rem)) - Mobile breakpoint (@media max-width: 48rem) for smaller screens - Ensures modal works well on all screen sizes - Benefits: - Modal adapts to different screen sizes automatically - Content is scrollable if it exceeds viewport - Better user experience on mobile devices - No more fixed height that may cut off content - Follows SLDS responsive design patterns Files changed: - detectAndLaunch.cmp: Removed fixed height, added responsive classes - detectAndLaunch.css: Added responsive CSS rules and media queries
Priority 3 Enhancement (3.3): Add JSDoc Documentation Changes: - Added comprehensive JSDoc comments to all functions in both controller and helper files - All functions now have proper documentation with parameter descriptions - Includes return types where applicable - Documents function purpose and behavior - Controller functions documented: - doInit: Initializes component field list for recordData watching - openModal: Opens modal dialog for flow execution - closeModal: Closes modal dialog - flowStatusChange: Handles flow status changes and closes modal when finished - recordUpdated: Main handler for record update events, determines which flow to launch - Helper functions documented: - debugLog: Already had JSDoc (no changes) - checkFieldValueMatch: Already had JSDoc (no changes) - processChangeEvent: Added JSDoc documenting record change event processing - callFlow: Added JSDoc documenting flow launch logic for modal/modeless modes - Documentation includes: - Function purpose and behavior - @param tags with types and descriptions - @returns tags where applicable - Additional context about event parameters and their structure Benefits: - Improved code maintainability and readability - Better IDE support with autocomplete and type hints - Easier for new developers to understand the codebase - Follows JavaScript documentation best practices - Enables better tooling support (JSDoc generators, etc.) Files changed: - detectAndLaunchController.js: Added JSDoc to 5 functions - detectAndLaunchHelper.js: Added JSDoc to 2 functions (2 already had docs)
Priority 3 Enhancement (3.4): Update API Version Changes: - Updated API version from 48.0 (2020) to 65.0 (Winter '26) - Enables access to latest Salesforce platform features - Ensures compatibility with current Salesforce releases - Follows Salesforce best practices for API version management - Benefits: - Access to latest platform capabilities and improvements - Better performance and security features - Compatibility with newer Salesforce features - Aligns with current Salesforce release cycle Note: Component functionality should be tested after API version update to ensure all features continue to work as expected. Files changed: - detectAndLaunch.cmp-meta.xml: Updated apiVersion from 48.0 to 65.0
Priority 3 Enhancement (3.5): Add User Feedback for Errors Changes: - Added lightning:notificationsLibrary to component for toast notifications - Added notifLib aura:id for accessing notifications library - Created showErrorToast() helper method - Displays error toast notifications to users - Uses sticky mode so errors remain visible - Also logs to console for debugging purposes - Includes JSDoc documentation - Replaced console.error with user-friendly toast notifications: - Flow start errors: Shows specific error message with flow name - Flow component not found: Configuration error message - Flow API name missing: Configuration error message - Console navigation errors: Navigation error message - Record update errors: Shows record error message - Error handling improvements: - User-facing errors now show toast notifications - Console errors still logged for debugging - Better user experience with visible error feedback - Clear, actionable error messages - Benefits: - Users can see errors without opening browser console - Better user experience with visible feedback - Errors are sticky so users don't miss them - Still maintains console logging for developers - Professional error handling Files changed: - detectAndLaunch.cmp: Added lightning:notificationsLibrary - detectAndLaunchHelper.js: Added showErrorToast method, updated error handling - detectAndLaunchController.js: Updated ERROR event handling to show toast
Bug Fix: Prevent runtime error when fieldData.value is undefined Issue: - Line 70 only checked for null: fieldData.value === null - If fieldData.value was undefined, the check would pass - Line 75 would then call .toString() on undefined, causing runtime error Fix: - Added explicit check for undefined: fieldData.value === undefined - Now checks both null and undefined before calling toString() - Prevents 'Cannot read property toString of undefined' errors Changes: - detectAndLaunchHelper.js line 70: Added undefined check in checkFieldValueMatch function - Updated comment to reflect both null and undefined checks This ensures the function safely handles all falsy value scenarios before attempting to convert the field value to a string.
… match Bug Fix: Component was launching flows even when field conditions were configured but not met Issue: - When fieldChange and fieldValue are configured, component should only launch flows when the field value matches - Refactored code had a logic flaw: if checkFieldValueMatch returned false, the else block would unconditionally launch flows based on changeType - This caused flows to launch even when field conditions were configured but the value didn't match Fix: - Added explicit check to determine if field conditions are configured - If field conditions ARE configured and value matches: launch flow (correct behavior) - If field conditions ARE configured but value doesn't match: return early, don't launch any flow (fixes bug) - If field conditions are NOT configured: proceed with normal flow launching logic (preserves existing behavior) Changes: - detectAndLaunchController.js: Added fieldConditionsConfigured check and early return when conditions don't match - Restores the original behavior where nested conditionals prevented launching when field conditions were configured but not met This ensures conditional field-based launching works correctly and only launches flows when the configured field value matches.
…onfigured Bug Fix: Field conditions were blocking deleteFlowName and loadFlowName flows Issue: - When fieldChange and fieldValue were configured, the code would return early for any event that didn't match field conditions, including REMOVED and LOADED events - This prevented deleteFlowName and loadFlowName from launching even though field-based conditions should only apply to CHANGED events - Users expecting delete or load flows to trigger found them blocked if they had also configured field-based conditional triggering Fix: - Field conditions now only apply to CHANGED events - Added check: fieldConditionsConfigured && eventParams.changeType === "CHANGED" - For REMOVED and LOADED events, even if field conditions are configured, the normal flow launching logic proceeds - This allows deleteFlowName and loadFlowName to work correctly regardless of whether field conditions are configured Changes: - detectAndLaunchController.js line 76: Added changeType check to field condition logic - Field conditions now only evaluated for CHANGED events - REMOVED and LOADED events bypass field condition checks and proceed with normal flow launching logic This ensures that field-based conditional launching only affects CHANGED events, while REMOVED and LOADED events continue to work as expected.
Enhancement: Improve component branding and identification Changes: - Added master label 'Detect and Launch Flow' to component markup - Created custom SVG icon representing detection and flow launching - Icon design includes: * Radar/detection circles (left) - represents record change detection * Arrow indicator (center) - represents launch/trigger action * Flow symbol (bottom) - represents screen flow execution - Uses Salesforce blue (#0176D3) background with white elements - Replaces generic 'A' icon with meaningful visual representation Files changed: - detectAndLaunch.cmp: Added label attribute to component - detectAndLaunch.svg: Created new custom icon design This improves the component's visibility and identification in the Lightning App Builder and component library.
…iption Fix: Aura components don't support label attribute on component tag Issue: - Added label attribute to component tag which caused deployment failure - Aura components don't support label attribute like LWC components do - Error: Invalid attribute "label" (1:142) Fix: - Removed label attribute from component tag - Updated description in .cmp-meta.xml to be more descriptive - Component will be identified by its API name in Lightning App Builder - Custom SVG icon still provides visual identification Changes: - detectAndLaunch.cmp: Removed label attribute - detectAndLaunch.cmp-meta.xml: Updated description to 'Detect and Launch Flow - Automatically detects record changes and launches screen flows based on configurable triggers' Note: Aura components are identified by their API name in Lightning App Builder. The custom SVG icon provides visual identification.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR includes bug fixes and enhancements for the Detect and Launch Lightning component.
Bug Fixes
Enhancements
Code Quality Improvements
Testing
All changes have been deployed and tested in milestoneDevOrg.
Files Changed